package org.batatasframework.util;

/**
 * 执行任务时间的统计，包括：
 * 1. 执行的次数
 * 2. 总执行时间
 * 3. 平均时间
 * 4. 最长时间
 * 5. 最短时间
 * 
 * @author jackson
 *
 */
public class RunningStatistics {
	
	/** 监控有效过程中总的处理次数 */
	private long count;
	
	/** 监控有效过程中总的处理时间 */
	private long total;
	
	/** 平均的处理时间 */
	private long arg;
	
	/** 最大处理时间 */
	private long max;
	
	/** 最小处理时间 */
	private long min = Long.MAX_VALUE;
	
	/** 最后一次的操作时间 */
	private long last;
	
	public RunningStatistics statistics(long start, long end){
		long t = end - start;
		
		count++;
		total += t;
		arg = total / count;
		if(t > max) max = t;
		if(t < min) min = t;
		last = end;
		return this;
	}
	
	/** 表示是否已经开始统计 */
	public boolean has(){
		return count > 0;
	}
	
	@Override
	public String toString() {
		String str = "";
		if(has()){
			str = total + "/" + count + "[" + max + "," + arg + "," + min + "]";
		}
		return str;
	}
	
	public String getRemark(){
		return "总时间/总个数[最大时间,平均时间,最小时间](时间单位:毫秒)";
	}

	public long getCount() {
		return count;
	}

	public long getTotal() {
		return total;
	}

	public long getArg() {
		return arg;
	}

	public long getMax() {
		return max;
	}

	public long getMin() {
		return min;
	}
}
